const webpack = require('webpack')  
const dotenv = require('dotenv')  
  
module.exports = {  
  chainWebpack: config => {  
    config  
      .plugin('define')  
      .tap(args => {  
        //console.log(args)  
          
        const config = getEnvsByDot()  
        //console.log(config)  
        // 将自定义的环境变量塞入配置中  
                //这里有个格式转化时的字符串的坑  
        //'"http://127.0.0.1:8088/"' //这种没问题  
        //'http://127.0.0.1:8088/' //这种就报错了！  
        Object.keys(config).forEach(key => {  
            if(typeof config[key] == "string"){  
                config[key] = '"'+config[key]+'"'  
            }  
            args[0]['process.env'][key] = config[key]  
            
        })  
        //args[0]['process.env'] = Object.assign(args[0]['process.env'],config)  
        console.log(args)  
        return args  
      })  
  }  
}  
  
/**  
 * 从.env中获取  
 * 使用了dotenv依赖  
 * 模仿vue-cli-service，不是APP_VUE*这个开头的全局变量就会被过滤掉  
 */  
function getEnvsByDot(){  
    const prefixRE = /^VUE_APP_/  
    let dotEnvs = {}  
    //1.先加载通用环境变量  
    const envPath0 = __dirname+'/.env'  
    const dotEnvsConfig0 = dotenv.config({path:envPath0})  
      
    if(!dotEnvsConfig0.error){  
        Object.keys(dotEnvsConfig0.parsed).forEach(key => {  
          if (prefixRE.test(key) ) {  
            dotEnvs[key] = dotEnvsConfig0.parsed[key]  
          }  
        })  
    }  
    //2.再加载专属环境变量  
    let env='local'  
    if (process.env.NODE_ENV === 'development') {  
        env='development'  
    } else if (process.env.NODE_ENV === 'production') {  
        env='production'  
    }else{  
        env=process.env.NODE_ENV  
    }  
      
    const envPath = __dirname+'/.env.'+env  
    const dotEnvsConfig = dotenv.config({path:envPath})  
    if(!dotEnvsConfig.error){  
        Object.keys(dotEnvsConfig.parsed).forEach(key => {  
          if (prefixRE.test(key) ) {  
            dotEnvs[key] = dotEnvsConfig.parsed[key]  
          }  
        })  
    }  
      
    return dotEnvs  
}